package com.jiangyg.devtools.toolkit;

import org.apache.commons.collections.CollectionUtils;

import java.util.Collection;

/**
 * 类描述：断言
 *
 * @author jiangyg
 * @date 2023-08-13
 */
public class Assert {

    /**
     * 断言错误前缀
     */
    // TODO 国际化
    private static final String ERROR_PREX = "[断言失败] - ";

    /**
     * 功能描述：断言状态是否正确
     *
     * @param expression 状态
     */
    public static void state(boolean expression) {
        if (!expression) {
            throw new IllegalStateException(ERROR_PREX + "传入状态必须为true！");
        }
    }

    /**
     * 功能描述：断言状态是否正确
     *
     * @param expression 状态
     * @param message    描述
     */
    public static void state(boolean expression, String message) {
        if (!expression) {
            throw new IllegalStateException(ERROR_PREX + message);
        }
    }

    /**
     * 功能描述：断言参数为空
     *
     * @param object 参数
     */
    public static void isNull(Object object) {
        if (object != null) {
            throw new IllegalArgumentException(ERROR_PREX + "此参数应该为空的！");
        }
    }

    /**
     * 功能描述：断言参数为空
     *
     * @param object  参数
     * @param message 描述
     */
    public static void isNull(Object object, String message) {
        if (object != null) {
            throw new IllegalArgumentException(ERROR_PREX + message);
        }
    }

    /**
     * 功能描述：断言参数不能为空
     *
     * @param object 参数
     */
    public static void notNull(Object object) {
        if (object == null) {
            throw new IllegalArgumentException(ERROR_PREX + "此参数是必须且不能为空的！");
        }
    }

    /**
     * 功能描述：断言参数不能为空
     *
     * @param object  参数
     * @param message 描述
     */
    public static void notNull(Object object, String message) {
        if (object == null) {
            throw new IllegalArgumentException(ERROR_PREX + message);
        }
    }

    /**
     * 功能描述：断言参数不能为空
     *
     * @param collection 参数
     */
    public static void notEmpty(Collection<?> collection) {
        if (collection == null || CollectionUtils.isEmpty(collection)) {
            throw new IllegalArgumentException("此参数不能为空！");
        }
    }

    /**
     * 功能描述：断言参数不能为空
     *
     * @param collection 参数
     * @param message    描述
     */
    public static void notEmpty(Collection<?> collection, String message) {
        if (collection == null || CollectionUtils.isEmpty(collection)) {
            throw new IllegalArgumentException(ERROR_PREX + message);
        }
    }

}
